package com.itguigu.inversion.依赖传递的三种方式.构造方法传递;

@SuppressWarnings("NonAsciiCharacters")
public class Test {
    public static void main(String[] args) {
        小米智能电视 小米智能电视 = new 小米智能电视();
        // 构造传入依赖
        万能遥控器 万能遥控器 = new 万能遥控器(小米智能电视);
    }
}

interface IOpenAndClose{
    /**
     * 注意这里是空参的,没有依赖接口
     */
    void open();
    void close();
}

interface ITv{
    void open();
    void close();
}

@SuppressWarnings("NonAsciiCharacters")
class 小米智能电视 implements ITv{

    @Override
    public void open() {
        System.out.println("我是小米智能电视,我打开了");
    }

    @Override
    public void close() {
        System.out.println("我是小米智能电视,我关闭了");
    }
}

@SuppressWarnings("NonAsciiCharacters")
class 万能遥控器 implements IOpenAndClose{

    // 使用成员变量的形式,注入依赖
   private ITv iTv;

    /**
     * 注意这里是空参的,没有依赖接口
     */
    @Override
    public void open() {
        this.iTv.open();
    }

    @Override
    public void close(){
        this.iTv.close();
    }

    private 万能遥控器(){

    }

    /**
     * 使用构造的方式给成员变量赋值
     * @param iTv 某个型号的电视
     */
   public 万能遥控器(ITv iTv){
        this.iTv = iTv;
    }
}
